package br.com.fiap.arquivo;

import org.apache.log4j.Logger;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import static java.lang.System.getProperty;


/**
 * Created with IntelliJ IDEA.
 * User: gabriel.medina
 * Date: 19/09/12
 * Time: 09:55
 * To change this template use File | Settings | File Templates.
 */
public class Diretorio {

    private BufferedReader arquivoEntrada  = null;
    private Logger logger = Logger.getLogger(Diretorio.class.getName());
    private List<Arquivo> listArquivo = new ArrayList<Arquivo>();
    private List<String> listDiretorios = new ArrayList<String>();


    public Diretorio(){
        listarDiretorio();
    }


    public List<Arquivo> getListaAquivo(){
        return listArquivo;
    }

    public void listarDiretorio(){

        String path  = getProperty("user.dir");
        path += "/src/main/resources/BD";

        logger.info(path);

        File  f = new File(path);

        File fList[] = f.listFiles();
        Arquivo arq;

        for (File list: fList){

            open(path + "/" + list.getName());
            getListDiretorios().add(list.getName());

            logger.info("listarDiretorio() - Carregando dados do arquivo.");
            arq = new Arquivo(list.getName().substring(0,7), formatRm());
            listArquivo.add(arq);
        }
    }

    private List<String> formatRm(){

        String linha;
        String[] temp;
        List<String> listaRm = new ArrayList<String>();

        logger.info("formatRm() - Formatando dados do arquivo.");
        try{
            if(arquivoEntrada != null){

                while((linha = arquivoEntrada.readLine()) != null){

                    temp = linha.split(",");

                    for(String s : temp){
                        listaRm.add(s.trim());
                    }
                }
                return listaRm;
            }
        }catch(IOException ex){
            logger.info("formatRm() - Erro ao formatar dados: ", ex);
        }
        return null;
    }


    public void open(String path){

        logger.info("open() - Abrindo Arquivo.");
        try{
            arquivoEntrada = new BufferedReader(new FileReader(path));

        }catch(IOException ex){
            logger.info("open() - Problema ao abrir arquivo: ", ex);
        }
    }


    public void close() {

        logger.info("close() - Fechando arquivo.");
        try{
            arquivoEntrada.close();

        }catch (IOException ex){
            logger.info("close() - Erro ao fechar arquivo: ", ex);
        }
    }

    public List<String> getListDiretorios() {
        return listDiretorios;
    }
}
